#ifndef __C51_DELAY_H
#define __C51_DELAY_H	

#include <reg52.h>

#ifndef SYS_CLK 
#define SYS_CLK 11059200L
#endif

void delay(uint16 time);	//延迟time毫秒

void delay1us();			//延迟1微秒
void delay5us();			//延迟5微秒
void delay10us();			//延迟10微秒
void delay50us();			//延迟50微秒
void delay100us();			//延迟100微秒
void delay1ms();			//延迟1毫秒

#if (SYS_CLK == 11059200L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	i = 2;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	_nop_();
	i = 20;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 43;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  _nop_();
  i = 2;
  j = 199;
  do { while (--j);} while (--i);
}
#endif

#if (SYS_CLK == 12000000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	_nop_();
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	_nop_();
	i = 2;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	_nop_();
	i = 22;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 47;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 2;
  j = 239;
  do { while (--j);} while (--i);
}
#endif

#if (SYS_CLK == 5529600L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	i = 9;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 20;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i;
  _nop_();
  i = 227;
  while (--i);
}
#endif

#if (SYS_CLK == 6000000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	_nop_();
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;

	i = 10;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 22;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i;
  _nop_();
  i = 247;
  while (--i);
}
#endif

#if (SYS_CLK == 18432000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;
	i = 1;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	i = 5;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	_nop_();
	i = 35;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	i = 74;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 3;
  j = 250;
  do { while (--j);} while (--i);
}
#endif
#if (SYS_CLK == 20000000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;

	_nop_();
	i = 1;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	_nop_();
	i = 5;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	i = 39;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 80;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 4;
  j = 58;
  do { while (--j);} while (--i);
}
#endif
#if (SYS_CLK == 22118400L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;
	i = 2;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	_nop_();
	i = 6;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	_nop_();
	i = 43;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 89;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  _nop_();
  i = 4;
  j = 146;
  do { while (--j);} while (--i);
}
#endif
#if (SYS_CLK == 24000000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;
	_nop_();
	i = 2;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	_nop_();
	i = 7;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	_nop_();
	i = 47;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 97;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 4;
  j = 225;
  do { while (--j);} while (--i);
}
#endif
#if (SYS_CLK == 27000000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;
	i = 3;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	_nop_();
	i = 8;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	_nop_();
	i = 53;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	i = 110;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 5;
  j = 93;
  do { while (--j);} while (--i);
}
#endif

#if (SYS_CLK == 30000000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;
	_nop_();
	i = 3;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	i = 10;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	i = 60;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 122;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 5;
  j = 218;
  do { while (--j);} while (--i);
}
#endif

#if (SYS_CLK == 33000000L)
//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;
	i = 4;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	i = 11;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	i = 66;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	i = 135;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 6;
  j = 86;
  do { while (--j);} while (--i);
}
#endif

#if (SYS_CLK == 33177600L)
	//========================================================================
// 描述: 延迟1微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1us()
{
}

//========================================================================
// 描述: 延迟5微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay5us()
{
	unsigned char i;
	i = 4;
	while (--i);
}

//========================================================================
// 描述: 延迟10微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay10us()
{
	unsigned char i;
	i = 11;
	while (--i);
}

//========================================================================
// 描述: 延迟50微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay50us()
{
	unsigned char i;
	_nop_();
	i = 66;
	while (--i);
}

//========================================================================
// 描述: 延迟100微秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay100us()
{
	unsigned char i;
	_nop_();
	i = 135;
	while (--i);
}
//========================================================================
// 描述: 延迟1毫秒.
// 参数: none.
// 返回: none.
//========================================================================
void delay1ms()
{
  unsigned char i, j;
  i = 6;
  j = 93;
  do { while (--j);} while (--i);
}
#endif

//========================================================================
// 描述: 延迟指定毫秒.
// 参数: 延迟时间（1-65535）.
// 返回: none.
//========================================================================
void delay(uint16 time)
{
  if(time < 1)
  {
	  time = 1;
  }	
  do { delay1ms();} while (--time);
}

#endif		//delay.h